export const errorsContractSource = `
  pragma solidity ^0.8.13;

  error One(uint value, string msg, bytes32 encoded);
  error Two(uint256[3] value, bytes32[2] encoded);

  contract ErrorsContract {
      function doThrow() public pure {
        assert(false);
      }

      function doRevert() public pure {
        revert("Revert cause");
      }

      function doRevertWithoutMessage() public pure {
        revert();
      }

      function doRequireFail() public pure {
        require(false, "Require cause");
      }

      function doRequireFailWithoutMessage() public pure {
        require(false);
      }

      function doPanic() public pure {
        uint d = 0;
        uint x = 1 / d;
      }

      function doRevertWithOne() public pure {
        revert One(0, 'message', 0x00cFBbaF7DDB3a1476767101c12a0162e241fbAD2a0162e2410cFBbaF7162123);
      }

      function doRevertWithTwo() public pure {
        revert Two(
          [
            uint256(1),
            uint256(2),
            uint256(3)
          ],
          [
            bytes32(0x00cFBbaF7DDB3a1476767101c12a0162e241fbAD2a0162e2410cFBbaF7162123),
            bytes32(0x00cFBbaF7DDB3a1476767101c12a0162e241fbAD2a0162e2410cFBbaF7162124)
          ]
        );
      }
  }
`

export const errorsContractABI = {
  contractName: 'ErrorsContract',
  abi: [
    {
      inputs: [
        { internalType: 'uint256', name: 'value', type: 'uint256' },
        { internalType: 'string', name: 'msg', type: 'string' },
        { internalType: 'bytes32', name: 'encoded', type: 'bytes32' },
      ],
      name: 'One',
      type: 'error',
    },
    {
      inputs: [
        { internalType: 'uint256[3]', name: 'value', type: 'uint256[3]' },
        { internalType: 'bytes32[2]', name: 'encoded', type: 'bytes32[2]' },
      ],
      name: 'Two',
      type: 'error',
    },
    { inputs: [], name: 'doPanic', outputs: [], stateMutability: 'pure', type: 'function' },
    { inputs: [], name: 'doRequireFail', outputs: [], stateMutability: 'pure', type: 'function' },
    { inputs: [], name: 'doRequireFailWithoutMessage', outputs: [], stateMutability: 'pure', type: 'function' },
    { inputs: [], name: 'doRevert', outputs: [], stateMutability: 'pure', type: 'function' },
    { inputs: [], name: 'doRevertWithOne', outputs: [], stateMutability: 'pure', type: 'function' },
    { inputs: [], name: 'doRevertWithTwo', outputs: [], stateMutability: 'pure', type: 'function' },
    { inputs: [], name: 'doRevertWithoutMessage', outputs: [], stateMutability: 'pure', type: 'function' },
    { inputs: [], name: 'doThrow', outputs: [], stateMutability: 'pure', type: 'function' },
  ],
  bytecode:
    '608060405234801561001057600080fd5b506106fd806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063afc874d21161005b578063afc874d2146100b5578063d950ca93146100bf578063eacf8a57146100c9578063fff78f9c146100d357610088565b8063092461c21461008d57806335c0a7101461009757806367644795146100a15780639817185d146100ab575b600080fd5b6100956100dd565b005b61009f610191565b005b6100a9610196565b005b6100b36101a3565b005b6100bd6101b9565b005b6100c76101f4565b005b6100d1610253565b005b6100db610296565b005b60405180606001604052806001815260200160028152602001600381525060405180604001604052807ecfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf716212360001b81526020017ecfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf716212460001b8152506040517f36cc9d48000000000000000000000000000000000000000000000000000000008152600401610188929190610411565b60405180910390fd5b600080fd5b60006101a157600080fd5b565b6000808160016101b39190610469565b90505050565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101eb906104f7565b60405180910390fd5b60007ecfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf71621236040517f824e791800000000000000000000000000000000000000000000000000000000815260040161024a9291906105f0565b60405180910390fd5b6000610294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028b90610678565b60405180910390fd5b565b60006102a5576102a4610698565b5b565b600060039050919050565b600081905092915050565b6000819050919050565b6000819050919050565b6102da816102c7565b82525050565b60006102ec83836102d1565b60208301905092915050565b6000602082019050919050565b61030e816102a7565b61031881846102b2565b9250610323826102bd565b8060005b8381101561035457815161033b87826102e0565b9650610346836102f8565b925050600181019050610327565b505050505050565b600060029050919050565b600081905092915050565b6000819050919050565b6000819050919050565b61038f8161037c565b82525050565b60006103a18383610386565b60208301905092915050565b6000602082019050919050565b6103c38161035c565b6103cd8184610367565b92506103d882610372565b8060005b838110156104095781516103f08782610395565b96506103fb836103ad565b9250506001810190506103dc565b505050505050565b600060a0820190506104266000830185610305565b61043360608301846103ba565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000610474826102c7565b915061047f836102c7565b92508261048f5761048e61043a565b5b828204905092915050565b600082825260208201905092915050565b7f5265766572742063617573650000000000000000000000000000000000000000600082015250565b60006104e1600c8361049a565b91506104ec826104ab565b602082019050919050565b60006020820190508181036000830152610510816104d4565b9050919050565b6000819050919050565b6000819050919050565b600061054661054161053c84610517565b610521565b6102c7565b9050919050565b6105568161052b565b82525050565b7f6d65737361676500000000000000000000000000000000000000000000000000600082015250565b600061059260078361049a565b915061059d8261055c565b602082019050919050565b6000819050919050565b60008160001b9050919050565b60006105da6105d56105d0846105a8565b6105b2565b61037c565b9050919050565b6105ea816105bf565b82525050565b6000606082019050610605600083018561054d565b818103602083015261061681610585565b905061062560408301846105e1565b9392505050565b7f5265717569726520636175736500000000000000000000000000000000000000600082015250565b6000610662600d8361049a565b915061066d8261062c565b602082019050919050565b6000602082019050818103600083015261069181610655565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea2646970667358221220e6a0dbdcf2895860647270ab1f3a8e8deb4a06e7bc950b3fd7d36ece795df50964736f6c63430008110033',
}
